package com.ocom.company.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ocom.common.entity.company.EntityCompanyConfig;
import com.ocom.common.entity.pay.EntityAppConfig;
import com.ocom.common.enums.DataSourceEnum;
import com.ocom.common.enums.MasterSlaveEnum;
import com.ocom.common.utils.CommonUtil;
import com.ocom.company.dao.IDaoCompanyConfig;
import com.ocom.company.service.CompanyConfigService;
import com.ocom.mysql.aspect.DataSourceAspect;
import com.ocom.redis.util.RedisUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;


@Service
public class CompanyConfigServiceImpl extends ServiceImpl<IDaoCompanyConfig, EntityCompanyConfig> implements CompanyConfigService {


    @Resource
    private RedisUtil redisUtil;

    @Override
    @DataSourceAspect(type = DataSourceEnum.PART_DB, isMaster = MasterSlaveEnum.SLAVE)
    public EntityCompanyConfig getTapValue(Long companyId, String key) {
        String canKey = "company_config#comId:" + companyId + "#key:" + key;
        Object requestRedis = redisUtil.get(canKey);
        if (requestRedis == null) {
            Long timeLong = Long.valueOf(4 * 60 * 60);
            QueryWrapper<EntityCompanyConfig> queryWrapper = Wrappers.query();
            queryWrapper.eq("com_id", companyId);
            queryWrapper.eq("tab", key);
            queryWrapper.orderByDesc("update_time");
            queryWrapper.last("limit 1");
            EntityCompanyConfig entityCompanyConfig = this.getOne(queryWrapper);
            if (entityCompanyConfig == null) {
                redisUtil.set(canKey, "null", timeLong);
            } else {
                redisUtil.set(canKey, entityCompanyConfig, timeLong);
            }
            return entityCompanyConfig;
        } else {
            if (requestRedis.toString().equals("null")) {
                return null;
            }
            return (EntityCompanyConfig) requestRedis;
        }


    }

    @Override
    @DataSourceAspect(type = DataSourceEnum.PART_DB, isMaster = MasterSlaveEnum.SLAVE)
    public List<EntityCompanyConfig> getCompanyConfig(Long companyId,String tab) {
        String canKey = "company_config#comId:" + companyId;
        //Object requestRedis = redisUtil.get(canKey);
        //if (requestRedis == null) {
         //   Long timeLong = Long.valueOf(4 * 60 * 60);
            QueryWrapper<EntityCompanyConfig> queryWrapper = Wrappers.query();
            queryWrapper.eq("com_id", companyId);
            if(!CommonUtil.isNull(tab)){
                queryWrapper.eq("tab ", tab );
            }
            queryWrapper.orderByDesc("update_time");
            List<EntityCompanyConfig> list = this.list(queryWrapper);
           // if (list == null || list.size()==0) {
           //     redisUtil.set(canKey, "null", timeLong);
           //     return null;
           // } else {
           //     redisUtil.set(canKey, list, timeLong);
           // }
            return list;
        //} else {
        //    if (requestRedis.toString().equals("null")) {
         //       return null;
         //   }
        //    return (List<EntityCompanyConfig>) requestRedis;
       // }
    }


    @Override
    @DataSourceAspect(type= DataSourceEnum.PART_DB,isMaster = MasterSlaveEnum.MASTER)
    public Boolean addCompanyConfig( Long companyId,  EntityCompanyConfig entityCompanyConfig) {
        UpdateWrapper<EntityCompanyConfig> updateWrapper =new UpdateWrapper<>();
        updateWrapper.eq("com_id",entityCompanyConfig.getComId());
        updateWrapper.eq("tab",entityCompanyConfig.getTab());
        updateWrapper.set("config",entityCompanyConfig.getConfig());
        updateWrapper.set("remarks",entityCompanyConfig.getRemarks());
        /**
         * 其他忽略
         */
        return this.saveOrUpdate(entityCompanyConfig,updateWrapper);
    }

    @Override
    @DataSourceAspect(type= DataSourceEnum.PART_DB,isMaster = MasterSlaveEnum.MASTER)
    public Boolean updateCompanyConfig(Long companyId, EntityCompanyConfig entityCompanyConfig) {
        String canKey = "company_config#comId:" + companyId;
        redisUtil.dels(canKey);
        UpdateWrapper<EntityCompanyConfig> updateWrapper =new UpdateWrapper<>();
        updateWrapper.eq("com_id",entityCompanyConfig.getComId());
        updateWrapper.eq("tab",entityCompanyConfig.getTab());
        updateWrapper.set("config",entityCompanyConfig.getConfig());
        updateWrapper.set("remarks",entityCompanyConfig.getRemarks());
        /**
         * 其他忽略
         */
        return this.update(entityCompanyConfig,updateWrapper);
    }

    @Override
    @DataSourceAspect(type= DataSourceEnum.PART_DB,isMaster = MasterSlaveEnum.MASTER)
    public Boolean removeCompanyConfig(Long companyId,String tab) {
        String canKey = "company_config#comId:" + companyId;
        redisUtil.dels(canKey);
        UpdateWrapper<EntityCompanyConfig> updateWrapper =new UpdateWrapper<>();
        updateWrapper.eq("com_id",companyId);
        updateWrapper.eq("tab",tab);
        /**
         * 其他忽略
         */
        return this.remove(updateWrapper);
    }


}
